/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2025-06-09     Administrator       the first version
 */
#ifndef APPLICATIONS_BSP_KEY2_H_
#define APPLICATIONS_BSP_KEY2_H_

#include <RGB_LED.h>
// 按键引脚定义
#define KEY1_PIN    GET_PIN(A, 0)  // PA0
#define KEY2_PIN    GET_PIN(A, 1)  // PA1
#define KEY3_PIN    GET_PIN(A, 2)  // PA2

// 按键状态结构体
struct key_status {
    rt_base_t pin;           // 按键引脚
    char name[10];           // 按键名称
    rt_uint8_t state;        // 当前状态
    rt_tick_t press_time;    // 按下时间
    rt_tick_t release_time;  // 释放时间
};

// 按键事件回调函数类型
typedef void (*key_event_cb)(rt_uint8_t key_id, rt_uint8_t event_type);

// 按键状态数组
static struct key_status keys[] = {
    {KEY1_PIN, "KEY1", 0, 0, 0},
    {KEY2_PIN, "KEY2", 0, 0, 0},
    {KEY3_PIN, "KEY3", 0, 0, 0}
};
#define KEY_COUNT (sizeof(keys) / sizeof(keys[0]))

// 事件回调函数指针
static key_event_cb key_event_handler = RT_NULL;

// 时间阈值定义 (单位:毫秒)
#define DEBOUNCE_TIME      50    // 消抖时间
#define DOUBLE_CLICK_TIME 300    // 双击间隔时间
#define LONG_PRESS_TIME   1000   // 长按时间

// 初始化按键驱动
void key_driver_init(key_event_cb callback);
// 示例使用
void key_event_handler_example(rt_uint8_t key_id, rt_uint8_t event_type);

#endif /* APPLICATIONS_BSP_KEY2_H_ */
